package br.com.senacrs.dao;

import br.com.senacrs.model.UsuarioEN;
import org.hibernate.Session;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.Expression;

public class UsuarioDao extends Dao<UsuarioEN> {
    
    public UsuarioDao(Session session){
        super(session, UsuarioEN.class);
    }
    
    private void criptograf(UsuarioEN usuario) {
		if (usuario.getSenha() != null) {
			try {
				MessageDigest senhaMd5 = MessageDigest.getInstance("MD5");
				senhaMd5.update(usuario.getSenha().getBytes());
				BigInteger hash = new BigInteger(1, senhaMd5.digest());
				usuario.setSenha(hash.toString(16));
			} catch (NoSuchAlgorithmException e) {
				//TODO Print Log
			}
		}
	}
    /**
     * Obtem usuario a partir de seu login e senha, retorna null caso não exista
     * @param usuario
     * @return usuario
     */
    public UsuarioEN logar(UsuarioEN usuario){
        //TODO não estou conseguindo fazer isto funcionar
        criptograf(usuario);
        Criteria sql = getSession().createCriteria(this.getClasse(), "x");
        sql.add(Expression.eq("x.nome", usuario.getNome()));
        sql.add(Expression.eq("x.senha", usuario.getSenha()));
        List<UsuarioEN> usuarios = sql.list();
        if(!usuarios.isEmpty()){
            return usuarios.get(0);
        }
        return null;
    
    }
}
